package com.ego.commons.pojo;

import com.ego.commons.constant.Constant;
import com.ego.commons.utils.CookieUtils;
import com.ego.commons.utils.JsonUtils;
import com.ego.commons.utils.ServletUtil;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @Title
 * @Author Lyg
 * @Description:
 */
public class ShopCart {
    //直接预先创建集合
    private List<CartPojo> cartList=new ArrayList<>();

    public List<CartPojo> getCartList() {
        return cartList;
    }

    /**
     * 向购物车添加商品
     *
     * @param cartPojo 购物车对象
     */
    public void addToCart(CartPojo cartPojo){
        for (CartPojo pojo : cartList) {
            //判断新增的商品id在集合中是否存在
            if (pojo.getId().equals(cartPojo.getId())){
                pojo.setNum(pojo.getNum()+cartPojo.getNum());
                return;
            }
        }
        cartList.add(cartPojo);
    }
    /**
     * 修改购物车中商品数量，当用户修改购物车的数量说明购物车中已经有此商品了
     *
     * @param id  商品id
     * @param num 数量
     */
    public void updateToCart(Long id, int num) {
        for (CartPojo cartPojo : cartList) {
            if (cartPojo.getId().equals(id)){
                cartPojo.setNum(num);
            }
        }
    }

    /**
     * 删除购物车中商品
     * @param id 商品id
     */
    public void deleteToCart(long id){
        //错误写法  不能边递归边删除
//        for (CartPojo pojo : cartList) {
//            if(pojo.getId().equals(id)){
//                cartList.remove(pojo);
//            }
//        }
        Iterator<CartPojo> iterator = cartList.iterator();
        while (iterator.hasNext()){
            CartPojo next = iterator.next();
            if (next.getId().equals(id)){
                iterator.remove();
                return;
            }
        }
    }




    /**
     * 保存购物车到Cookie中
     * @param shopCart
     */
    public static void saveCartToCookie(ShopCart shopCart){
        //将购物车对象转换成JSON字符串以便存储到Cookie中
        String shopCartJson = JsonUtils.objectToJson(shopCart);
        //将购物车存储到Cookie中
        CookieUtils.doSetCookieBase64(ServletUtil.getRequest(),ServletUtil.getResponse(),Constant.CART_NAME,shopCartJson,60*60*24*30);
    }


    /**
     * 封装获取购物车
     * @return
     */
    public static ShopCart getShopCartByCookie(){
        //先从Cookie获取购物车：第一次购买Cookie没有购物车，第二次开始才有
        String shopCartStr = CookieUtils.getCookieValueBase64(ServletUtil.getRequest(), Constant.CART_NAME);

        ShopCart shopCart = null;

        if (StringUtils.isNotBlank(shopCartStr)){
            //将Cookie中购物车JSON字符串转换成购物车对象
            shopCart= JsonUtils.jsonToPojo(shopCartStr,ShopCart.class);
        }else {
            shopCart=new ShopCart();
        }
        return shopCart;
    }
}
